package com.ctsi.commons.event;

import java.util.Map;

/**
 * 事件发布
 * 
 * @author zhangjw
 * 
 */
public interface EventPublisher {
	/**
	 * 发布事件
	 * 
	 * @param o
	 *            事件对象
	 * @param context
	 *            传递给订阅者的context，为订阅者构造条件的context
	 * @param arg
	 *            附加信息
	 * @throws NotRollbackExcetion
	 *             如果事件发生错误，需要事务回滚，就抛出此异常，其他的异常将忽略
	 */
	public void publishEvent(final BaseEvent o, Map<String, ?> context, Object... arg) throws NotRollbackExcetion;

	/**
	 * 发布事件
	 * 
	 * @param o
	 *            事件对象
	 * @param arg
	 *            附加信息
	 * @throws NotRollbackExcetion
	 *             如果事件发生错误，需要事务回滚，就抛出此异常，其他的异常将忽略
	 */
	public void publishEvent(final BaseEvent o, Object... arg) throws NotRollbackExcetion;

	/**
	 * 事件是否有观察者
	 * @param eventId
	 * @return
	 * @throws NotRollbackExcetion
	 */
	public boolean hasObserver(String eventId) throws NotRollbackExcetion;
}
